package com.ruoyi.system.mapper;

import java.util.List;
import com.ruoyi.system.domain.SuperPoint;
import com.ruoyi.system.domain.vo.SuperPointVo;
import org.apache.ibatis.annotations.Param;

/**
 * 用户积分Mapper接口
 * 
 * @author ruoyi
 * @date 2025-08-13
 */
public interface SuperPointMapper 
{
    /**
     * 查询用户积分
     * 
     * @param id 用户积分主键
     * @return 用户积分
     */
    public SuperPoint selectSuperPointById(Long id);

    /**
     * 根据用户ID查询积分信息
     * 用于根据用户ID快速查询该用户的积分记录
     * 
     * @param userId 用户ID
     * @return 用户积分记录，如果不存在则返回null
     */
    public SuperPoint selectSuperPointByUserId(Long userId);

    /**
     * 查询用户积分列表
     * 
     * @param superPoint 用户积分查询条件
     * @return 用户积分集合
     */
    public List<SuperPoint> selectSuperPointList(SuperPoint superPoint);

    /**
     * 查询用户积分列表（包含用户信息）
     * 通过JOIN查询获取积分信息和用户基本信息（昵称、账号等）
     * 
     * @param superPoint 用户积分查询条件
     * @return 包含用户信息的积分VO集合
     */
    public List<SuperPointVo> selectSuperPointVoList(SuperPoint superPoint);

    /**
     * 新增用户积分
     * 
     * @param superPoint 用户积分
     * @return 结果
     */
    public int insertSuperPoint(SuperPoint superPoint);

    /**
     * 修改用户积分
     * 
     * @param superPoint 用户积分
     * @return 结果
     */
    public int updateSuperPoint(SuperPoint superPoint);

    /**
     * 增加用户积分
     * 在用户现有积分基础上增加指定数量的积分
     * 
     * @param userId 用户ID
     * @param points 增加的积分数（必须为正数）
     * @return 影响的行数，1表示成功，0表示用户不存在
     */
    public int increaseUserPoints(@Param("userId") Long userId, @Param("points") Integer points);

    /**
     * 减少用户积分
     * 在用户现有积分基础上减少指定数量的积分，确保积分不会变为负数
     * 
     * @param userId 用户ID
     * @param points 减少的积分数（必须为正数）
     * @return 影响的行数，1表示成功，0表示积分不足或用户不存在
     */
    public int decreaseUserPoints(@Param("userId") Long userId, @Param("points") Integer points);

    /**
     * 删除用户积分
     * 
     * @param id 用户积分主键
     * @return 结果
     */
    public int deleteSuperPointById(Long id);

    /**
     * 批量删除用户积分
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSuperPointByIds(Long[] ids);
}
